/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.insa.pendu;

import java.util.Arrays;
import java.util.List;
import java.util.LinkedList;
import java.util.Scanner;

/**
 *
 * @author strokyl
 */
class Jeux {

	private final Scanner scanner;

	//Objet qui gère le score
	private final Score score;

	//Le mot à deviner
	private final String motSecret;

	//Tableau des caracteres trouvé
	//un carachtère est remplacé par étoile si il n'est pas trouvé
	private final char[] charTrouve;

	//liste des lettres proposé par le joueur mais interdite;
	private final List<Character> lettreInterdites;

	private boolean fin;

	private int numlettreTrouves;

	public Jeux(Scanner scanner) {
		this.scanner = scanner;
		this.motSecret = MotAleatoire.getMot();
		this.score = new Score();
		this.charTrouve = new char[motSecret.length()];
		for(int i = 0; i < charTrouve.length; i++) {
			charTrouve[i] = '*';
		}

		this.lettreInterdites = new LinkedList<Character>();
		fin = false;
		numlettreTrouves = 0;
	}
	
	
	/**
         * Lance la partie
         */
	public void commencer() {
		while(!fin) {
			faireDevinerLettre();
		}

		if(partieGagne()) {
			System.out.println("Vous avez trouvé le mot !");
		} else {
			System.out.println("Looser !");
		}
	}

        /**
         * Retourne true uniquement si la partie est fait
         * @return
         */
	public boolean partiFini() {
		return fin;
	}


	public boolean partieGagne() {
                //TODO
		return false;
	}

        /**
         * Retourne une lettre saisie par l'utilisateur
         * si il saisie plus d'une lettre on doit lui redemandait de saisir
         * @return
         */
	private char faireSaisirLettre() {
            return 'a';
	}

        /**
         * Affiche l'état du jeux (printEtat) fait saisir une lettre (faireSaisir
         * Une lettre) et met à jour le score les lettreInterdites et chartTrouve
         * pensez à utiliser TrouverMotif.majCharTrouver
         */
	private void faireDevinerLettre() {
		printEtat();
		char lettre = faireSaisirLettre();
		int num  = TrouverMotif.majCharTrouver(lettre, motSecret, charTrouve);
		if(num > 0) {
			numlettreTrouves += num;
			System.out.println("Bravo cette lettre était bien dans le mot");
		}
		else {
			lettreInterdites.add(lettre);
			score.dec();
			System.out.println("Dommage cette lettre n'était pas dans le mot");
		}

		fin = partieGagne() || score.isNull();
	}

        /**
         * Affiche le nombre de coup restant et charTrouve
         */
	private void printEtat() {
		score.printCoupRestant();
		System.out.println(new String(charTrouve));
		System.out.println("Lettre qui ne sont pas dans le mot : " + lettreInterdites.toString());
	}
}
